package com.gccloud.design.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gccloud.design.entity.OptButtonBranchRelEntity;
import com.gccloud.design.entity.OptButtonEntity;
import com.gccloud.design.vo.BwpBusinessTypeVo;
import com.gccloud.design.vo.OptButtonBranchVo;
import com.gccloud.design.vo.OptButtonVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 实现功能【按钮配置持久层】
 *
 * @author hu.hongdou
 * @date 2022/2/21
 */
@Mapper
public interface ButtonConfigDao extends BaseMapper<OptButtonEntity> {

    /**
     * @param buttonName 按钮名称
     * @return 按钮列表
     * 查询所有环节按钮列表
     */
    List<OptButtonVo> newQueryButton(@Param("buttonName") String buttonName, Page<OptButtonVo> page);

    /**
     * @param buttonId 按钮标识
     * @return 按钮分支列表
     * 查询所有环节按钮分支
     */
    List<OptButtonBranchVo> newQueryButtonBranch(@Param("buttonId") Integer buttonId, Page<OptButtonBranchVo> page);

    /**
     * 添加按钮
     *
     * @param entity 按钮实体
     * @return 添加按钮
     */
    int newAddButton(OptButtonEntity entity);

    /**
     * 更新按钮
     *
     * @param entity 按钮实体
     * @return 添加按钮
     */
    int newModifyButton(@Param("entity") OptButtonEntity entity);

    /**
     * 删除环节按钮
     *
     * @param buttonId 按钮主键
     * @return 删除按钮
     */
    int newDeleteButtonByBtnId(@Param("buttonId") Long buttonId);

    /**
     * 删除环节按钮分支关系表
     *
     * @param buttonId 按钮主键
     * @return 删除按钮
     */
    int newDeleteButtonBranchRelByBtnId(@Param("buttonId") Long buttonId);

    /**
     * 添加按钮分支关系
     *
     * @param entity 按钮实体
     * @return 添加按钮
     */
    int newAddButtonBranchRel(OptButtonBranchRelEntity entity);

    /**
     * 删除环节按钮分支关系表
     *
     * @param buttonId    按钮主键
     * @param optBranchId 按钮分支主键
     * @return 数量
     */
    int newDeleteButtonBranchRelByBtnIdAndBranchId(@Param("buttonId") int buttonId, @Param("optBranchId") int optBranchId);

    /**
     * 查询操作分支-去除以配置在按钮之外的
     *
     * @return 流程业务列表
     */
    List<OptButtonBranchVo> queryOptButtonBranch(@Param("buttonId") Integer buttonId, @Param("businessTypeId") String businessTypeId);

    /**
     * 查询所有流程业务
     *
     * @return 流程业务列表
     */
    List<BwpBusinessTypeVo> queryBusinessType();

    /**
     * 查询所有流程业务
     *
     * @return 流程业务列表
     */
    List<OptButtonVo> getLinkButton(String tacheId, Page<OptButtonVo> page);

    /**
     * 查询环节未配置的操作按钮
     *
     * @return 流程业务列表
     */
    List<OptButtonVo> queryButtonByTacheId(String tacheId, Page<OptButtonVo> page);

}
